import os
import random
import time
from urllib.parse import quote

import requests
from bs4 import BeautifulSoup

'''
b站关键词搜素结果下载
'''
user_agent = [
    "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0",
    "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",
    "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
    "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
    "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",
    "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",
    "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+",
    "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0",
    "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)",
    "UCWEB7.0.2.37/28/999",
    "NOKIA5700/ UCWEB7.0.2.37/28/999",
    "Openwave/ UCWEB7.0.2.37/28/999",
    "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",
    # iPhone 6：
    "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25",

]

hd = {'User-Agent': random.choice(user_agent)}


# 访问网页获取网页信息
def geturlinfo(url):
    try:
        r = requests.get(url, timeout=30, headers=hd)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ''


# 参数为第一页地址
# https://motherless.com/term/videos/Grope?range=0&size=0&sort=relevance
def getvideourl(url, urlfilepath, page_count):
    # page_count = 60
    page = 1
    while page <= page_count:
        url1 = url + f"?page={page}&t=v"
        print(url1)
        try:
            text = geturlinfo(url1)
            soup = BeautifulSoup(text, "html.parser")
            aa = soup.find_all("a", class_="img-container")
            print("page:" + str(page))
            page += 1
            for tag in aa:
                video_url = tag.attrs["href"]
                print(video_url)
                if not str(video_url).__contains__('motherless') or str(video_url).__contains__('/g/'):
                    continue
                with open(urlfilepath, "a+", encoding="utf-8") as urltxt:
                    video_url = video_url.replace('https://motherless.com/',
                                                  'https://cdn5-videos.motherlessmedia.com/videos/')
                    video_url = video_url + '.mp4'
                    urltxt.write(video_url + "\n")
        except Exception as e:
            print(e)
            continue


def downloadvideo(url, filename, dir_name):
    if not os.path.exists(dir_name):  # os模块判断并创建
        os.mkdir(dir_name)
    dir_name = dir_name + filename  # 设置文件夹的名字
    if not os.path.exists(dir_name):  # os模块判断并创建
        os.mkdir(dir_name)
    urls = open(url)
    for video_url in urls:
        try:
            print(video_url)
            os.system('%s/you-get.exe -fao %s %s' % (
            os.path.dirname(os.path.abspath(__file__)), dir_name, video_url.split("\n")[0]))  # 调用you-get方法挨个下载该次循环的所有视频
            with open(url + "log", "a+", encoding="utf-8") as vv:
                vv.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                vv.write("   " + video_url + "\n")
            print("download success")
            print("=================================================================")
        except:
            continue

# https://motherless.com/u/Shiny12?page=2&t=v
if __name__ == "__main__":
    download_geturlfile = "1"  # 1 仅获取视频路径保存至文件 2 仅下载视频 3 获取视频路径保存至文件并下载视频
    serch_name = "mistreed"
    serch_name_u = quote(serch_name, encoding="utf-8")
    url = f"https://motherless.com/u/{serch_name_u}"
    print(url)
    urlfilepath = "D:/motherless.comvideobypy/" + serch_name + "url.txt"
    dir_name = 'D:/motherless.comvideobypy/'  # 设置文件夹的名字
    if not os.path.exists(dir_name):
        os.makedirs(dir_name)
    if "1" == download_geturlfile or "3" == download_geturlfile:
        if os.path.exists(urlfilepath):
            os.rename(urlfilepath, urlfilepath + '.bak')
            os.remove(urlfilepath)
        getvideourl(url, urlfilepath, 100)
    if "2" == download_geturlfile or "3" == download_geturlfile:
        downloadvideo(urlfilepath, serch_name, dir_name)
